perm filename RUNFN1.MLI[MLI,LSP] blob
sn#112529 filedate 1975-06-29 generic text, type T, neo UTF8
BEGIN
SPECIAL ?&X?&, ?&Y?&;
EXPR ?&FOR (L, FN, EX, B);
BEGIN
NEW ?&Y?&, NOTFIRST, LST;
LST ← MAPCAR(FUNCTION(LAMBDA (?&X?&);
<CADR ?&X?&, CADDR ?&X?& EQ 'ON, CADDR ?&X?& EQ '?←,
CAR ?&X?& EQ 'NEW,
IF GET(CADR ?&X?&, 'VALUE) THEN CDR GET(CADR ?&X?&, 'VALUE)
ELSE CDR GET('?&UNBOUND?&, 'VALUE)> CONS EVAL CADDDR ?&X?&),
L);
LOOP; IF ?&FORSTOP(LST) THEN ?&FORRESET(LST, T) ALSO RETURN ?&Y?&;
MAPCAR(FUNCTION(LAMBDA (?&X?&);
SET(CAAR ?&X?&, IF CADAR ?&X?& THEN CDR ?&X?& ELSE CADR ?&X?&)),
LST);
?&Y?& ← EVAL IF NOTFIRST THEN <FN, '?&Y?&, EX> ELSE NOTFIRST ← T ALSO EX;
IF EVAL B THEN ?&FORRESET(LST, NIL) ALSO RETURN ?&Y?&;
LST ← MAPCAR(FUNCTION(LAMBDA (?&X?&);
CAR ?&X?& CONS (IF CADDAR ?&X?& THEN EVAL CDDR ?&X?& ELSE CDDR ?&X?&)),
LST);
GO LOOP;
END;
EXPR ?&FORSTOP (L);
L AND (NULL CDAR(L) OR ?&FORSTOP(CDR L));
EXPR ?&FORRESET (L, ?&Y?&);
MAPCAR(FUNCTION(LAMBDA (?&X?&);
IF CADDDR CAR ?&X?& THEN SET(CAAR ?&X?&, CADDDR CDAR ?&X?&)
ELSE ?&Y?& AND NULL CDR ?&X?& AND SET(CAAR ?&X?&, NIL)), L);
EXPR ?&RANGE (LOW, UP, INC);
IF INC = 0 THEN NIL
ELSE ?&RANGE1(LOW, UP, INC, INC GREATERP 0, INC LESSP 0);
EXPR ?&RANGE1 (LOW, UP, INC, POS, NEG);
IF (POS AND LOW GREATERP UP) OR (NEG AND LOW LESSP UP) THEN NIL
ELSE <LOW, '?&RANGE1, LOW + INC, UP, INC, POS, NEG>;
EXPR ?&DO (FN, EX, B);
BEGIN
NEW V;
L; V ← FN(V, EVAL EX);
IF EVAL B THEN RETURN V
ELSE GO L;
END;
EXPR ?&WHILE (FN, B, EX);
BEGIN
NEW V;
L; IF EVAL B THEN V ← FN(V, EVAL EX)
ELSE RETURN V;
GO L;
END;
EXPR ?&INDEX (L, X);
IF X THEN ?&INDEX(CAR (L ↓ SUB1 CAR X), CDR X)
ELSE L;
END.